Method-Level Security কি এবং এর প্রয়োগ

Java Technologies - স্প্রিং সিকিউরিটি (Spring Security) - Method-Level Security
203

Method-level security হল Spring Security-এর একটি বৈশিষ্ট্য যা আপনাকে নির্দিষ্ট মেথডের জন্য নিরাপত্তা কনফিগার করার সুবিধা দেয়। এর মাধ্যমে আপনি শুধুমাত্র নির্দিষ্ট রোল, পারমিশন বা শর্তের অধীনে একটি মেথড অ্যাক্সেস করার অনুমতি দিতে পারেন। এটি মূলত annotation-based security প্রয়োগে ব্যবহৃত হয় এবং খুবই কার্যকরী যখন আপনি fine-grained control চান যে কোন ব্যবহারকারী বা রোল কোন ফিচার অ্যাক্সেস করতে পারবে।

Spring Security-তে method-level security কে প্রাথমিকভাবে দুইটি মূল উপায়ে ব্যবহার করা হয়:

  1. Authorization (অথরাইজেশন) – কোন ব্যবহারকারী বা রোল কে কোন মেথড অ্যাক্সেস করতে পারবে তা নির্ধারণ করা।
  2. Authentication (প্রমাণীকরণ) – কোন ব্যবহারকারী সিস্টেমে লগ ইন করেছেন এবং তাদের শংসাপত্র যাচাই করা।

Spring Security Method-Level Security-এর প্রধান ধরনের Annotation

  1. @PreAuthorize
    • @PreAuthorize annotation ব্যবহার করে মেথডের আগে authorization চেক করা হয়। এটি SpEL (Spring Expression Language) ব্যবহার করে condition নির্ধারণ করতে পারে।
  2. @Secured
    • @Secured annotation শুধু নির্দিষ্ট রোল বা পারমিশন মেনে মেথড অ্যাক্সেস করতে অনুমতি দেয়। তবে এটি SpEL এর চেয়ে কম ফ্লেক্সিবল।
  3. @PostAuthorize
    • @PostAuthorize annotation ব্যবহার করে মেথডের পর authorization চেক করা হয়। এটি মূলত মেথডের আউটপুট পর্যালোচনা করার জন্য ব্যবহৃত হয়।
  4. @RolesAllowed
    • @RolesAllowed annotation Java EE এর একটি অংশ এবং এটি সেভাবে Spring Security এর মাধ্যমে কাজ করে। তবে এটি @Secured এর মতো রোল চেক করতে ব্যবহৃত হয়।

Method-Level Security সক্রিয় করা

1. Method-level security সক্রিয় করা

Spring Security-তে method-level security ব্যবহারের জন্য @EnableGlobalMethodSecurity annotation যোগ করতে হয়। এটি আপনার Spring Security configuration ক্লাসে থাকতে হবে।

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfig {
    // Configuration for method-level security
}
  • prePostEnabled = true: এটি @PreAuthorize এবং @PostAuthorize ব্যবহার করতে সক্ষম করবে।
  • securedEnabled = true: এটি @Secured annotation এর ব্যবহার সক্ষম করবে।

Method-Level Security Example

1. @PreAuthorize ব্যবহার

@PreAuthorize ব্যবহার করে মেথডের আগে condition চেক করা হয়। এখানে আমরা SpEL ব্যবহার করছি যা রোল বা পারমিশনের উপর ভিত্তি করে মেথড অ্যাক্সেস নিয়ন্ত্রণ করবে।

import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @PreAuthorize("hasRole('ADMIN')")
    public void createProduct() {
        System.out.println("Product created!");
    }

    @PreAuthorize("hasRole('USER') or hasRole('ADMIN')")
    public void viewProduct() {
        System.out.println("Product viewed!");
    }

    @PreAuthorize("hasPermission(#productId, 'Product', 'READ')")
    public void viewProductDetails(Long productId) {
        System.out.println("Product details viewed for productId: " + productId);
    }
}
  • @PreAuthorize("hasRole('ADMIN')"): শুধুমাত্র ADMIN রোলের ব্যবহারকারীরা createProduct() মেথডটি অ্যাক্সেস করতে পারবেন।
  • @PreAuthorize("hasRole('USER') or hasRole('ADMIN')"): USER বা ADMIN রোলের ব্যবহারকারী viewProduct() মেথডটি অ্যাক্সেস করতে পারবেন।
  • @PreAuthorize("hasPermission(#productId, 'Product', 'READ')"): এই method-এ hasPermission ব্যবহার করে permission ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ করা হয়েছে।

2. @Secured ব্যবহার

@Secured একটি নির্দিষ্ট রোল বা permission ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এটি খুবই সরল এবং SpEL এর চেয়ে কম ফ্লেক্সিবল।

import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Secured("ROLE_ADMIN")
    public void createProduct() {
        System.out.println("Product created!");
    }

    @Secured({"ROLE_USER", "ROLE_ADMIN"})
    public void viewProduct() {
        System.out.println("Product viewed!");
    }
}
  • @Secured("ROLE_ADMIN"): শুধুমাত্র ROLE_ADMIN ব্যবহারকারী createProduct() মেথড অ্যাক্সেস করতে পারবেন।
  • @Secured({"ROLE_USER", "ROLE_ADMIN"}): ROLE_USER বা ROLE_ADMIN ব্যবহারকারী viewProduct() মেথড অ্যাক্সেস করতে পারবেন।

3. @PostAuthorize ব্যবহার

@PostAuthorize annotation মেথডের পরে ব্যবহার করা হয়। এটি মেথডের আউটপুট যাচাই করার জন্য ব্যবহৃত হয়।

import org.springframework.security.access.prepost.PostAuthorize;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @PostAuthorize("returnObject.owner == authentication.name")
    public Product getProduct(Long productId) {
        return productRepository.findById(productId).orElse(null);
    }
}
  • @PostAuthorize("returnObject.owner == authentication.name"): এটি চেক করে যে Product অবজেক্টটির owner বর্তমানে লগ ইন করা ব্যবহারকারীর নামের সাথে মেলাচ্ছে কি না।

৪. @RolesAllowed ব্যবহার

@RolesAllowed Java EE-এর একটি annotation এবং Spring Security-এও এটি ব্যবহৃত হয়। এটি শুধুমাত্র নির্দিষ্ট রোলগুলির জন্য মেথড অ্যাক্সেস প্রদান করে।

import javax.annotation.security.RolesAllowed;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @RolesAllowed("ADMIN")
    public void createProduct() {
        System.out.println("Product created!");
    }

    @RolesAllowed({"USER", "ADMIN"})
    public void viewProduct() {
        System.out.println("Product viewed!");
    }
}
  • @RolesAllowed("ADMIN"): শুধুমাত্র ADMIN রোলের ব্যবহারকারী createProduct() মেথডটি অ্যাক্সেস করতে পারবেন।

Conclusion

Spring Security-তে method-level security ব্যবহারের মাধ্যমে আপনি নির্দিষ্ট মেথডের জন্য নিরাপত্তা নিয়ন্ত্রণ করতে পারেন। এটি fine-grained access control প্রদান করে, যেখানে আপনি নির্দিষ্ট রোল, পারমিশন বা শর্তের উপর ভিত্তি করে মেথড অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন। Spring Security-তে বিভিন্ন ধরনের annotations (যেমন @PreAuthorize, @Secured, @PostAuthorize, @RolesAllowed) ব্যবহার করে মেথড-ভিত্তিক নিরাপত্তা কনফিগার করা যায়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...